package bz.ziro.kanbe.controller.file;

import java.io.IOException;
import java.io.OutputStream;
import java.util.logging.Logger;
import org.slim3.controller.Controller;
import org.slim3.controller.Navigation;
import org.slim3.util.ThrowableUtil;

import bz.ziro.kanbe.dao.SiteFileDao;
import bz.ziro.kanbe.model.SiteFile;

/**
 * ファイル作成
 * @author Administrator
 */
public class IndexController extends Controller {

    @SuppressWarnings("unused")
    private static final Logger logger = Logger.getLogger(IndexController.class.getName());

    /**
     * MIMEタイプ
     */
    private String mime;
    
    /**
     * ファイル作成
     */
    @Override
    public Navigation run() {

        String keyBuf = param("key");
        SiteFile file = SiteFileDao.find(Long.valueOf(keyBuf));
        //コンテンツタイプを変更する
        mime = file.getMime();

        //ダウンロードを行う
        download(file.getName(), file.getFile());
        return null;
    }

    /**
     * ダウンロード処理
     */
    @Override
    protected void download(String fileName, byte[] data) {

    	//MIMEが存在しない場合
        if ( mime == null || mime.equals("") ) {
        	//既存処理を行う
        	super.download(fileName, data);
        	return;
        }
        
        try {
        	//コンテンツタイプを設定
            response.setContentType(mime);
            //書き出す
            OutputStream out = response.getOutputStream();
            try {
                out.write(data);
            } finally {
                out.close();
            }
            return;
        } catch (IOException e) {
            ThrowableUtil.wrapAndThrow(e);
        }
    }
}
